#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <unistd.h>
#include <string.h>
#include <time.h>

#define BUFFER_SIZE 32
int main()
{
    const char *name = "./test.txt";
#if 0
    int fd1 = open(name, O_RDWR | O_CREAT | O_APPEND, 0644);//0644文件权限
    if(fd1 == -1)
    {
        perror("open error");//打开失败 ,那就创建o_creta
        return -1;
    }   
    printf("fd1:%d\n", fd1);//非负整数,每个fd指向一个文件

    char buffer[BUFFER_SIZE] = { 0};
    /* 读 */
    int readBytes = read(fd1, buffer, sizeof(buffer)-1);//读多少字节，不要读全部，留一个给\0
    printf("readBytes:%d\tbuffer:%s\n", readBytes, buffer);//非负整数
#endif
    struct stat bufferStat;
    memset(&bufferStat, 0, sizeof(bufferStat));
    stat(name, &bufferStat);

    /* 文件大小 */
    printf("size:%ld\n", bufferStat.st_size);

    /* 文件权限改为文件类型 */
    //文件类型：普通文件
    printf("mode:%d\n", S_ISREG(bufferStat.st_mode));//mode 不是文件的权限是类型 
    
    /* 最后 一次访问文件时间打印 */
    localtime(&(bufferStat.st_atime));
    printf("atime:%s\n", ctime(&(bufferStat.st_atime)));//mode 不是文件的权限是类型 

    /* 最后一次修改文件时间打印（文件修改vi) */
    localtime(&(bufferStat.st_mtime));
    printf("atime:%s\n", ctime(&(bufferStat.st_mtime)));//mode 不是文件的权限是类型 

    /*最后一次改变文件 时间打印 */
    localtime(&(bufferStat.st_ctime));
    printf("atime:%s\n", ctime(&(bufferStat.st_ctime)));//mode 不是文件的权限是类型 

    return 0;
}























